package com.xwaiy.xwaiyrpc.server.tcp;

import com.xwaiy.xwaiyrpc.server.HttpServer;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetServer;
import io.vertx.core.parsetools.RecordParser;

/**
 * @Author Xwaiy
 * @Date 2025/8/27 17:29
 **/
public class VertxTcpServer implements HttpServer {

    private byte[] handleRequest(byte[] request) {
        return "Hello,Xwaiy!".getBytes();
    }

    @Override
    public void doStart(int port) {
        Vertx vertx = Vertx.vertx();

        // 创建 TCP 服务器
        NetServer server = vertx.createNetServer();

        // 处理请求 （使用RecordParser解决半包粘包问题）
        server.connectHandler(socket -> {
            RecordParser parser = RecordParser.newFixed(8);
            parser.setOutput(new Handler<Buffer>() {
                int size = -1;
                Buffer result = Buffer.buffer();
                @Override
                public void handle(Buffer buffer) {
                    if(-1 == size) {
                        size = buffer.getInt(4);
                        parser.fixedSizeMode(size);
                        result.appendBuffer(buffer);
                    }else {
                        result.appendBuffer(buffer);
                        parser.fixedSizeMode(8);
                        size = -1;
                        result = Buffer.buffer();
                    }
                }
            });

            socket.handler(parser);

//            // 处理连接
//            socket.handler(buffer -> {
//                byte[] requestData = buffer.getBytes();
//                // 在这里进行自定义的字节数组处理逻辑，比如解析请求、调用服务、构造响应等
//                byte[] responseData = handleRequest(requestData);
//                // 发送响应
//                socket.write(Buffer.buffer(responseData));
//            });
        });

        // 启动 TCP 服务器并监听指定端口
        server.listen(port, result -> {
            if (result.succeeded()) {
                System.out.println("TCP 服务启动在端口： " + port);
            } else {
                System.err.println("TCP 启动失败: " + result.cause());
            }
        });
    }

    public static void main(String[] args) {
        new VertxTcpServer().doStart(9000);
    }
}
